﻿using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using MonopolyRandy;

namespace MonopolyRandyTests
{
    [TestClass]
    public class SpelerTests
    {
        private Speler _spelerHerman;
        private Speler _spelerRandy;
        private Eigendomsbewijs _eigendomsbewijs;
        private StraatVeld _straatVeld;

        [TestInitialize]
        public void Setup()
        {
            _spelerHerman = new Speler("Herman", 850, new Bord());
            _spelerRandy = new Speler("Randy", 850, new Bord());
            _straatVeld = new StraatVeld(3, "Brink", "Ons Dorp", 0, 0);
            _eigendomsbewijs = new EigendomsbewijsStraat(null, _straatVeld, 60, 4, 20, 60, 180, 320, 450);
        }


        [TestMethod]
        public void TestOfSpelerNaamKlopt()
        {
            Assert.AreEqual(expected: "Herman", actual: _spelerHerman.GetNaam());
            Assert.AreEqual(expected: "Randy", actual: _spelerRandy.GetNaam());
        }

        [TestMethod]
        public void TestOfSpelerBedragKlopt()
        {
            Assert.AreEqual(expected: 850, actual: _spelerHerman.GetSaldo());
        }

        [TestMethod]
        public void TestOfBedragMinderIsNaBetaling()
        {
            Assert.AreEqual(expected: 750, actual: _spelerHerman.BetaalBedrag(100));
            //// Door de eerste betaling van 100 moet het saldo na de tweede betaling -100 -150, dus 600 zijn
            Assert.AreEqual(expected: 600, actual: _spelerHerman.BetaalBedrag(150));
            Assert.AreEqual(expected: 0, actual: _spelerRandy.BetaalBedrag(850));
        }

        [TestMethod]
        public void TestOfBedragMeerIsNaBetalingOntvangen()
        {
            Assert.AreEqual(expected: 950, actual: _spelerHerman.OntvangBedrag(100));
            // Door de eerste betaling van 100 moet het saldo na de tweede betaling +100 +150, dus 1100
            Assert.AreEqual(expected: 1100, actual: _spelerHerman.OntvangBedrag(150));
            Assert.AreEqual(expected: 2300, actual: _spelerRandy.OntvangBedrag(1450));
        }

        [TestMethod]
        public void TestOfVerzetPionNaarHetJuistVeldGaat()
        {
            _spelerHerman.VerzetPion(10);
            Assert.AreEqual(expected: "Gevangenis", actual: _spelerHerman.GetPionVeld().GetVeldNaam());
        }

        [TestMethod]
        public void TestOfOpgemektWordtDatSpelerOpStartKomt()
        {
            _spelerHerman.VerzetPion(38);
            _spelerHerman.VerzetPion(2);
            Assert.AreEqual(expected: true, actual: _spelerHerman.LangsStartGekomen);
        }

        [TestMethod]
        public void TestOfOpgemerktWordtDatSpelerOverStartHeenGaat()
        {
            _spelerHerman.VerzetPion(38);
            _spelerHerman.VerzetPion(3);
            Assert.AreEqual(expected: true, actual: _spelerHerman.LangsStartGekomen);
        }

        [TestMethod]
        public void TestOfKoopbedragEigendomsbewijsAfgeschrevenWordt()
        {
            _spelerHerman.VerzetPion(3);
            _spelerHerman.KoopEigendomsbewijs(_eigendomsbewijs);
            Assert.AreEqual(expected: 790, actual: _spelerHerman.GetSaldo());
        }
    }
}
